package com.partsoft.dits.integrate;

import com.partsoft.dits.DataDescriptorRegistry;
import com.partsoft.dits.DescriptorAccepter;
import com.partsoft.dits.LdapDataEdgeDescriptor;

/**
 * 表边界描述符注册表接口
 * @param <E> 必须实现{@link LdapDataEdgeDescriptor}接口
 */
public interface LdapDataDescriptorRegistry<E extends LdapDataEdgeDescriptor> extends
		DataDescriptorRegistry<E> {

	/**
	 * 获取指定的描述符
	 * @param contextId LDAP容器ID
	 * @param parentDN 父亲DN
	 * @param propertyId 数据属性ID
	 * @param messageCode 消息代码
	 * @return 实现{@link LdapDataEdgeDescriptor}接口的对象
	 */
	E getDescriptor(String contextId, String parentDN, String propertyId, String messageCode);
	
	/**
	 * 获取指定的描述符列表
	 * @param contextId LDAP容器ID
	 * @param parentDN 父亲DN
	 * @param propertyId 数据属性ID
	 * @return 实现{@link LdapDataEdgeDescriptor}接口的对象数组
	 */
	E[] getDescriptors(String contextId, String parentDN, String propertyId);
	
	
	/**
	 * 获取指定的描述符列表
	 * @param contextId LDAP容器ID
	 * @param parentDN 父亲DN
	 * @param propertyId 数据属性ID
	 * @param accepter 消息接受器
	 * @return 实现{@link LdapDataEdgeDescriptor}接口的对象数组
	 */
	E[] getDescriptors(String contextId, String parentDN, String propertyId, DescriptorAccepter<E> accepter);
	
	/**
	 * 获得描述符个数
	 * @param contextId LDAP容器ID
	 * @param parentDN 父亲DN
	 * @param propertyId 数据属性ID
	 * @return 个数
	 */
	int countDescriptor(String contextId, String parentDN, String propertyId);
	
	/**
	 * 获得描述符个数
	 * @param contextId LDAP容器ID
	 * @param parentDN 父亲DN
	 * @param propertyId 数据属性ID
	 * @param accepter 消息接受器
	 * @return 个数
	 */
	int countDescriptor(String contextId, String parentDN, String propertyId, DescriptorAccepter<E> accepter);
	
}
